﻿using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraBars;
using DevExpress;
using System.Data.SqlServerCe;
using DevExpress.XtraPrinting;
using DevExpress.XtraPrinting.Preview;

namespace QuanLySieuThi_08520114_08520220
{
    public partial class TrangChu : DevExpress.XtraBars.Ribbon.RibbonForm
    {
        Loading load = new Loading();
        private controller_mathang controller_MH;
        private controller_hoadon controller_HD;
        private controller_nhanvien controller_NV;
        private controller_bangluong controller_BL;
        private controller_kho controller_K;
        private controller_chungtu controller_CT;

        public TrangChu()
        {
            load.Show();          
            InitializeComponent();
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(typeof(DevExpress.UserSkins.BonusSkins).Assembly);
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(typeof(DevExpress.UserSkins.OfficeSkins).Assembly);
            DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("McSkin");
            ribbonControl.AllowMinimizeRibbon = false;
            load.Close();

            HideAllPanel();
            MatHangPanel.Visible = true;
            controller_MH = new controller_mathang();
            controller_HD = new controller_hoadon();
            controller_NV = new controller_nhanvien();
            controller_BL = new controller_bangluong();
            controller_K = new controller_kho();
            controller_CT = new controller_chungtu();


        }

        private void TrangChu_Load(object sender, EventArgs e)
        {

            if (FileExists(Application.StartupPath.ToString() + "/SieuThi.sdf") == false)
            {
                MessageBox.Show("Không tìm thấy database !", "Thông báo");
                Application.Exit();
            }
            else
            {
                list_MH_data();
            }

        }

        private static bool FileExists(string sPathName)
        {
            try
            {
                return (System.IO.File.Exists(sPathName)); 
            }
            catch (Exception)
            {
                return (false); 
            }
        }         
        private void ribbonControl_SelectedPageChanged(object sender, EventArgs e)
        {
            if (ribbonControl.SelectedPage.Name == "MatHangTab")
            {
                HideAllPanel();
                MatHangPanel.Visible = true;
                list_MH_data();
            }
            else if (ribbonControl.SelectedPage.Name == "HoaDonTab")
            {
                HideAllPanel();
                HoaDonPanel.Visible = true;
                list_HD_data();
            }
            else if (ribbonControl.SelectedPage.Name == "NhanVienTab")
            {
                HideAllPanel();
                NhanVienPanel.Visible = true;
                list_BP_data();
                list_CHV_data();
                list_CV_data();
                list_NV_data();
            }
            else if (ribbonControl.SelectedPage.Name == "BangLuongTab")
            {
                HideAllPanel();
                BangLuongPanel.Visible = true;
                list_thamso();
                Show_BL();
            }
            else if (ribbonControl.SelectedPage.Name == "KhoHangTab")
            {
                HideAllPanel();
                KhoHangPanel.Visible = true;
                list_K_data();
            }
            else if (ribbonControl.SelectedPage.Name == "ChungTuTab")
            {
                HideAllPanel();
                ChungTuPanel.Visible = true;
                list_CT_data();
            }
        }

        private void HideAllPanel()
        {
            MatHangPanel.Visible = false;
            HoaDonPanel.Visible = false;
            NhanVienPanel.Visible = false;
            BangLuongPanel.Visible = false;
            KhoHangPanel.Visible = false;
            ChungTuPanel.Visible = false;
        }

        private void DonViTinhBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            DonViTinh Form_DonViTinh = new DonViTinh();
            Form_DonViTinh.ShowDialog();
        }

        private void ChungLoaiMHBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            ChungLoai Form_ChungLoai = new ChungLoai();
            Form_ChungLoai.ShowDialog();
        }

        private void ChungLoaiHDBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            ChungLoai Form_ChungLoai = new ChungLoai();
            Form_ChungLoai.ShowDialog();
        }

        private void DonViTinhHDBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            DonViTinh Form_DonViTinh = new DonViTinh();
            Form_DonViTinh.ShowDialog();
        }

        private void PTThanhToanBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            ThanhToan Form_ThanhToan = new ThanhToan();
            Form_ThanhToan.ShowDialog();
        }


    /*======================================= Mặt Hàng ===================================*/
        #region MAT HANG
        private string MH_ID = "";
        private void list_MH_data()
        {
            DataTable data = controller_MH.list_mathang();
            if (data != null)
            {
                try
                {
                    MatHangListView.DataSource = data;
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

        }

        private void ChungLoaMHiCb_ShowingEditor(object sender, ItemCancelEventArgs e)
        {
            DataTable cl = controller_MH.list_chung_loai();
            ChungLoaiMHPt.Items.Clear();
            foreach(DataRow row in cl.Rows)
            {
                ChungLoaiMHPt.Items.Add(row["TenChungLoai"].ToString());
            }
        }

        private void DonViTinhMHCb_ShowingEditor(object sender, ItemCancelEventArgs e)
        {
            DataTable dvt = controller_MH.list_DVT();
            DonViTinhMHPt.Items.Clear();
            foreach (DataRow row in dvt.Rows)
            {
                DonViTinhMHPt.Items.Add(row["TenDonViTinh"].ToString());
            }
        }

        private void ThemMatHangBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            if (check_MatHang())
            {
                string[] data = new string[10];
                data[0] = MaMatHangTb.EditValue.ToString();
                data[1] = controller_MH.get_ma_cl(ChungLoaMHiCb.EditValue.ToString());
                if (data[1] == "")
                {
                    MessageBox.Show("Tên chủng loại không có thực !","Thông báo");
                    return;
                }
                data[2] = controller_MH.get_ma_dvt(DonViTinhMHCb.EditValue.ToString());
                if (data[2] == "")
                {
                    MessageBox.Show("Tên đơn vị tính không có thực !","Thông báo");
                    return;
                }
                data[3] = TenMatHangTb.EditValue.ToString();
                data[4] = NhaSanXuatTb.EditValue.ToString();
                data[5] = NhaPhanPhoiTb.EditValue.ToString();
                data[6] = GiaNhapMHTb.EditValue.ToString();
                data[7] = GiaBanThucMHTb.EditValue.ToString();
                data[8] = KhuyenMaiMHTb.EditValue.ToString();
                data[9] = GiaTruocKhuyenMaiTb.EditValue.ToString();

                try
                {
                    if (controller_MH.add_mathang(data))
                    {
                        clear_MatHang();
                        this.list_MH_data();
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                MH_ID = "";
            }
        }

        private void clear_MatHang()
        {
            MaMatHangTb.EditValue = null;
            TenMatHangTb.EditValue = null;
            NhaSanXuatTb.EditValue = null;
            NhaPhanPhoiTb.EditValue = null;
            GiaNhapMHTb.EditValue = null;
            GiaBanThucMHTb.EditValue = null;
            KhuyenMaiMHTb.EditValue = 0;
            GiaTruocKhuyenMaiTb.EditValue = null;
            ChungLoaMHiCb.EditValue = null;
            DonViTinhMHCb.EditValue = null;
            MH_ID = "";
        }

        private bool check_MatHang()
        {
            if (MaMatHangTb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa điền mã mặt hàng !");
                return false;
            }

            if (TenMatHangTb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa điền tên mặt hàng !");
                return false;
            }

            if (ChungLoaMHiCb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa chọn chủng loại mặt hàng !");
                return false;
            }

            if (DonViTinhMHCb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa chọn đơn vị tính mặt hàng !");
                return false;
            }
            if (NhaSanXuatTb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa điền tên nhà sản xuất !");
                return false;
            }

            if (NhaPhanPhoiTb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa điền tên nhà phân phối !");
                return false;
            }

            if (GiaNhapMHTb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa điền giá nhập mặt hàng !");
                return false;
            }

            if (Convert.ToInt32(GiaNhapMHTb.EditValue.ToString()) <= 0)
            {
                MessageBox.Show("Giá nhập mặt hàng phải lớn hơn 0 !");
                return false;
            }

            if (Convert.ToInt32(KhuyenMaiMHTb.EditValue) < 0)
            {
                MessageBox.Show("Khuyến mãi của mặt hàng phải lớn hơn hoặc bằng 0 !");
                return false;
            }

            if (GiaTruocKhuyenMaiTb.EditValue == null)
            {
                MessageBox.Show("Bạn chưa điền giá trước khuyến mãi của mặt hàng !");
                return false;
            }

            if (Convert.ToInt32(GiaTruocKhuyenMaiTb.EditValue.ToString()) <= 0)
            {
                MessageBox.Show("Giá trước khuyến mãi của mặt hàng phải lớn hơn 0 !");
                return false;
            }

            if (Convert.ToInt32(KhuyenMaiMHTb.EditValue) > Convert.ToInt32(GiaTruocKhuyenMaiTb.EditValue.ToString()))
            {
                MessageBox.Show("Khuyến mãi của mặt hàng phải nhỏ hơn hoặc bằng Giá trước khuyến mãi !");
                return false;
            }
            if (GiaBanThucMHTb.EditValue == null )
            {
                MessageBox.Show("Bạn chưa điền giá bán thực của mặt hàng !");
                return false;
            }

            if (Convert.ToInt32(GiaBanThucMHTb.EditValue.ToString()) != Convert.ToInt32(GiaTruocKhuyenMaiTb.EditValue) - Convert.ToInt32(KhuyenMaiMHTb.EditValue))
            {
                MessageBox.Show("Giá bán thực của mặt hàng phải bằng giá trước khuyến mãi trừ khuyến mãi !");
                return false;
            }


            return true;
        }

        private void GiaTruocKhuyenMaiTb_EditValueChanged(object sender, EventArgs e)
        {

            GiaBanThucMHTb.EditValue = Convert.ToInt32(GiaTruocKhuyenMaiTb.EditValue) - Convert.ToInt32(KhuyenMaiMHTb.EditValue);
        }

        private void KhuyenMaiMHTb_EditValueChanged(object sender, EventArgs e)
        {
            if (GiaTruocKhuyenMaiTb.EditValue != null)
            {
                GiaBanThucMHTb.EditValue = Convert.ToInt32(GiaTruocKhuyenMaiTb.EditValue) - Convert.ToInt32(KhuyenMaiMHTb.EditValue);
            }
        }

        private void XoaMatHangBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            if (ListMatHang.GetFocusedDataSourceRowIndex() < 0)
                return;

            if (MessageBox.Show("Bạn có thực sự muốn xoá ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                return;

            try
            {
                if (controller_MH.del_mathang(ListMatHang.GetRowCellValue(ListMatHang.GetFocusedDataSourceRowIndex(), "MatHangID").ToString()))
                {
                    MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                }
            }
            catch (SystemException ex)
            {
                MessageBox.Show(ex.Message);
            }
            clear_MatHang();
            this.list_MH_data();
        }

        private void SuaMatHangBtn_ItemClick(object sender, ItemClickEventArgs e)
        {
            if (MH_ID == "")
                return;

            if (MessageBox.Show("Bạn có thực sự muốn sửa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                return;

            if (check_MatHang())
            {
                string[] data = new string[11];
                data[0] = MaMatHangTb.EditValue.ToString();
                data[1] = controller_MH.get_ma_cl(ChungLoaMHiCb.EditValue.ToString());
                if (data[1] == "")
                {
                    MessageBox.Show("Tên chủng loại không có thực !", "Thông báo");
                    return;
                }
                data[2] = controller_MH.get_ma_dvt(DonViTinhMHCb.EditValue.ToString());
                if (data[2] == "")
                {
                    MessageBox.Show("Tên đơn vị tính không có thực !", "Thông báo");
                    return;
                }
                data[3] = TenMatHangTb.EditValue.ToString();
                data[4] = NhaSanXuatTb.EditValue.ToString();
                data[5] = NhaPhanPhoiTb.EditValue.ToString();
                data[6] = GiaNhapMHTb.EditValue.ToString();
                data[7] = GiaBanThucMHTb.EditValue.ToString();
                data[8] = KhuyenMaiMHTb.EditValue.ToString();
                data[9] = GiaTruocKhuyenMaiTb.EditValue.ToString();
                data[10] = MH_ID;

                try
                {
                    if (controller_MH.update_mathang(data))
                    {
                        MessageBox.Show("Bạn đã sửa thành công !", "Thông báo");
                        this.list_MH_data();
                        clear_MatHang();
                        MH_ID = ""; 
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void MatHangListView_DoubleClick(object sender, EventArgs e)
        {
            if (ListMatHang.FocusedRowHandle >= 0)
            {
                int idx = ListMatHang.GetFocusedDataSourceRowIndex();
                MH_ID = ListMatHang.GetRowCellValue(idx, "MatHangID").ToString();
                MaMatHangTb.EditValue = ListMatHang.GetRowCellValue(idx, "MaMatHang");
                TenMatHangTb.EditValue = ListMatHang.GetRowCellValue(idx, "TenMatHang");
                NhaSanXuatTb.EditValue = ListMatHang.GetRowCellValue(idx, "NhaSanXuat");
                NhaPhanPhoiTb.EditValue = ListMatHang.GetRowCellValue(idx, "NhaPhanPhoi");
                GiaNhapMHTb.EditValue = ListMatHang.GetRowCellValue(idx, "GiaNhap");
                GiaBanThucMHTb.EditValue = ListMatHang.GetRowCellValue(idx, "GiaBanThuc");
                KhuyenMaiMHTb.EditValue = ListMatHang.GetRowCellValue(idx, "KhuyenMai");
                GiaTruocKhuyenMaiTb.EditValue = ListMatHang.GetRowCellValue(idx, "GiaTruocKhuyenMai");
                ChungLoaMHiCb.EditValue = ListMatHang.GetRowCellValue(idx, "TenChungLoai");
                DonViTinhMHCb.EditValue = ListMatHang.GetRowCellValue(idx, "TenDonViTinh");
            }
        }

        #endregion
    /*========================================================================================*/

        
    /*======================================= Nhân viên ===================================*/
        private string CH_V_ID= "", BP_ID ="", CV_ID="", NV_ID="";
            /*------------------------ Chức Vụ ----------------------*/
            #region CHUC VU
            private void list_CHV_data()
            {
                DataTable data = controller_NV.list_data("CHUCVU");
                if (data != null)
                {
                    try
                    {

                        ChucVuListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void ThemChucVuBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (QLTenChucVuTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền tên chức vụ !", "Thông báo");
                    return;
                }

                try
                {
                    if (controller_NV.add_data("CHUCVU",QLTenChucVuTb.EditValue.ToString(),"ChucVu") )
                    {
                        QLTenChucVuTb.EditValue = null;
                        this.list_CHV_data();
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }

                CH_V_ID = "";

            }

            private void XoaChucVuBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListChucVu.GetFocusedDataSourceRowIndex() < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                try
                {
                    if (controller_NV.del_data("CHUCVU", ListChucVu.GetRowCellValue(ListChucVu.GetFocusedDataSourceRowIndex(), "MaChucVu").ToString(), "ChucVu"))
                    {
                        MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                QLTenChucVuTb.EditValue = null;

                this.list_CHV_data();
            }

            private void ChucVuListView_DoubleClick(object sender, EventArgs e)
            {
                QLTenChucVuTb.EditValue = ListChucVu.GetRowCellValue(ListChucVu.GetFocusedDataSourceRowIndex(), "TenChucVu").ToString();
                CH_V_ID = ListChucVu.GetRowCellValue(ListChucVu.GetFocusedDataSourceRowIndex(), "MaChucVu").ToString();
            }

            private void SuaChucVuBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (QLTenChucVuTb.EditValue == null || CH_V_ID == "")
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn sửa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;


                try
                {
                    if (controller_NV.update_data(CH_V_ID, QLTenChucVuTb.EditValue.ToString(),"CHUCVU","ChucVu"))
                    {
                        MessageBox.Show("Bạn đã sửa thành công !", "Thông báo");

                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }

                QLTenChucVuTb.EditValue = null;
                CH_V_ID = "";
                this.list_CHV_data();
            }
        #endregion
            /*-------------------------------------------------------*/

            /*------------------------ Bộ Phận ----------------------*/
            #region BO PHAN
            private void list_BP_data()
            {
                DataTable data = controller_NV.list_data("BOPHAN");
                if (data != null)
                {
                    try
                    {

                        BoPhanListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void ThemBoPhanBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (QLTenBoPhanTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền tên bộ phận !", "Thông báo");
                    return;
                }

                try
                {
                    if (controller_NV.add_data("BOPHAN", QLTenBoPhanTb.EditValue.ToString(), "BoPhan"))
                    {
                        QLTenBoPhanTb.EditValue = null;
                        this.list_BP_data();
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                BP_ID = "";
            }

            private void XoaBoPhanBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListBoPhan.GetFocusedDataSourceRowIndex() < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                try
                {
                    if (controller_NV.del_data("BOPHAN", ListBoPhan.GetRowCellValue(ListBoPhan.GetFocusedDataSourceRowIndex(), "MaBoPhan").ToString(), "BoPhan"))
                    {
                        MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                QLTenBoPhanTb.EditValue = null;

                this.list_BP_data();
            }

            private void BoPhanListView_DoubleClick(object sender, EventArgs e)
            {
                QLTenBoPhanTb.EditValue = ListBoPhan.GetRowCellValue(ListBoPhan.GetFocusedDataSourceRowIndex(), "TenBoPhan").ToString();
                BP_ID = ListBoPhan.GetRowCellValue(ListBoPhan.GetFocusedDataSourceRowIndex(), "MaBoPhan").ToString();

            }

            private void SuaBoPhanBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (QLTenBoPhanTb.EditValue == null || BP_ID == "")
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn sửa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;


                try
                {
                    if (controller_NV.update_data(BP_ID, QLTenBoPhanTb.EditValue.ToString(),"BOPHAN","BoPhan"))
                    {
                        MessageBox.Show("Bạn đã sửa thành công !", "Thông báo");

                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }

                QLTenBoPhanTb.EditValue = null;
                BP_ID = "";
                this.list_BP_data();
            }
            #endregion
            /*-------------------------------------------------------*/

            /*------------------------ Công Việc ----------------------*/
            #region CONG VIEC
            private void list_CV_data()
            {
                DataTable data = controller_NV.list_data("CONGVIEC");
                if (data != null)
                {
                    try
                    {

                        CongViecListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void ThemCongViecBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (QLTenCongViecTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền tên công việc !", "Thông báo");
                    return;
                }

                try
                {
                    if (controller_NV.add_data("CONGVIEC", QLTenCongViecTb.EditValue.ToString(), "CongViec"))
                    {
                        QLTenCongViecTb.EditValue = null;
                        this.list_CV_data();
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                CV_ID = "";
            }

            private void XoaCongViecBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListCongViec.GetFocusedDataSourceRowIndex() < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                try
                {
                    if (controller_NV.del_data("CONGVIEC", ListCongViec.GetRowCellValue(ListCongViec.GetFocusedDataSourceRowIndex(), "MaCongViec").ToString(), "CongViec"))
                    {
                        MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                QLTenCongViecTb.EditValue = null;

                this.list_CV_data();
            }

            private void CongViecListView_DoubleClick(object sender, EventArgs e)
            {
                QLTenCongViecTb.EditValue = ListCongViec.GetRowCellValue(ListCongViec.GetFocusedDataSourceRowIndex(), "TenCongViec").ToString();
                CV_ID = ListCongViec.GetRowCellValue(ListCongViec.GetFocusedDataSourceRowIndex(), "MaCongViec").ToString();


            }

            private void SuaCongViecBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (QLTenCongViecTb.EditValue == null || CV_ID == "")
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn sửa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;


                try
                {
                    if (controller_NV.update_data(CV_ID, QLTenCongViecTb.EditValue.ToString(), "CONGVIEC", "CongViec"))
                    {
                        MessageBox.Show("Bạn đã sửa thành công !", "Thông báo");

                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }

                QLTenCongViecTb.EditValue = null;
                CV_ID = "";
                this.list_CV_data();

            }
            #endregion
            /*-------------------------------------------------------*/

            /*------------------------ Nhân viên ----------------------*/
            #region NHAN VIEN
            private void list_NV_data()
            {
                DataTable data = controller_NV.list_nhanvien();
                if (data != null)
                {
                    try
                    {

                        NhanVienListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private bool check_NV()
            {
                if (MaNhanVienTb.EditValue == null || MaNhanVienTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền mã nhân viên !");
                    return false;
                }

                if (HoTenTb.EditValue == null || HoTenTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền tên nhân viên !");
                    return false;
                }

                if (NgaySinhDp.EditValue == null || NgaySinhDp.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền ngày sinh của nhân viên !");
                    return false;
                }
                else
                {
                    if (DateTime.Compare(Convert.ToDateTime(NgaySinhDp.EditValue), DateTime.Now) > 0)
                    {
                        MessageBox.Show("Ngày sinh không thể lớn hơn ngày hiện tại !");
                        return false;
                    }
                }

                if (QueQuanTb.EditValue == null || QueQuanTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền quê quán của nhân viên !");
                    return false;
                }

                if (DiaChiTTTb.EditValue == null || DiaChiTTTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền địa chỉ thường trú của nhân viên !");
                    return false;
                }

                if (DiaChiHNTb.EditValue == null || DiaChiHNTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền địa chỉ hiện tại của nhân viên !");
                    return false;
                }

                if (DienThoaiTb.EditValue == null || DienThoaiTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số điện thoại của nhân viên !");
                    return false;
                }


                if (NgayLamDp.EditValue == null || NgayLamDp.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền ngày vào làm của nhân viên !");
                    return false;
                }
                else
                {
                    if (DateTime.Compare(Convert.ToDateTime(NgayLamDp.EditValue), DateTime.Now) > 0)
                    {
                        MessageBox.Show("Ngày vào làm không thể lớn hơn ngày hiện tại !");
                        return false;
                    }
                    if (DateTime.Compare(Convert.ToDateTime(NgayLamDp.EditValue), Convert.ToDateTime(NgaySinhDp.EditValue)) <= 0)
                    {
                        MessageBox.Show("Ngày vào làm không thể nhỏ hơn hay bằng ngày sinh !");
                        return false;
                    }
                }

                if (DienThoaiTb.EditValue == null || DienThoaiTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số điện thoại của nhân viên !");
                    return false;
                }

                if (TrinhDoNVTb.EditValue == null || TrinhDoNVTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền trình độ của nhân viên !");
                    return false;
                }

                if (SoHopDongTb.EditValue == null || SoHopDongTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số hợp đồng của nhân viên !");
                    return false;
                }

                if (ThoiHanHDDp.EditValue == null || ThoiHanHDDp.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền thời hạn hợp đồng của nhân viên !");
                    return false;
                }
                else
                {
                    if (DateTime.Compare(Convert.ToDateTime(ThoiHanHDDp.EditValue), Convert.ToDateTime(NgaySinhDp.EditValue)) <= 0)
                    {
                        MessageBox.Show("Thời hạn hợp đồng không thể nhỏ hơn hay bằng ngày sinh !");
                        return false;
                    }
                    if (DateTime.Compare(Convert.ToDateTime(ThoiHanHDDp.EditValue), Convert.ToDateTime(NgayLamDp.EditValue)) <= 0)
                    {
                        MessageBox.Show("Thời hạn hợp đồng không thể nhỏ hơn hay bằng ngày vào làm !");
                        return false;
                    }
                }

                if (LuongKhoiDiemTb.EditValue == null || LuongKhoiDiemTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền mức lương khi kí hợp đồng của nhân viên !");
                    return false;
                }
                else
                {
                    if (Convert.ToInt32(LuongKhoiDiemTb.EditValue) <= 0)
                    {
                        MessageBox.Show("Lương khởi điểm của nhân viên phải lớn hơn 0!");
                        return false;
                    }
                }

                if (LuongHienTaiTb.EditValue == null || LuongHienTaiTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền mức lương hiện tại của nhân viên !");
                    return false;
                }
                else
                {
                    if (Convert.ToInt32(LuongHienTaiTb.EditValue) < 0)
                    {
                        MessageBox.Show("Lương hiện tại của nhân viên phải lớn hơn 0!");
                        return false;
                    }
                    if (Convert.ToInt32(LuongHienTaiTb.EditValue) < Convert.ToInt32(LuongKhoiDiemTb.EditValue))
                    {
                        MessageBox.Show("Lương hiện tại của nhân viên phải lớn hơn hoặc bằng lương khởi điểm !");
                        return false;
                    }
                }

                if (NgayKyHDDp.EditValue == null || NgayKyHDDp.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền ngày ký hợp đồng của nhân viên !");
                    return false;
                }
                else
                {
                    if (DateTime.Compare(Convert.ToDateTime(NgayKyHDDp.EditValue), DateTime.Now) > 0)
                    {
                        MessageBox.Show("Ngày ký hợp đồng không thể lớn hơn ngày hiện tại !");
                        return false;
                    }
                    if (DateTime.Compare(Convert.ToDateTime(NgayKyHDDp.EditValue), Convert.ToDateTime(NgaySinhDp.EditValue)) <= 0)
                    {
                        MessageBox.Show("Ngày ký hợp đồng không thể nhỏ hơn hay bằng ngày sinh !");
                        return false;
                    }
                    if (DateTime.Compare(Convert.ToDateTime(NgayKyHDDp.EditValue), Convert.ToDateTime(ThoiHanHDDp.EditValue)) >= 0)
                    {
                        MessageBox.Show("Ngày ký hợp đồng không thể lớn hơn hay bằng ngày hết hạn hợp đồng !");
                        return false;
                    }
                }

                if (ChucVuCb.EditValue == null || ChucVuCb.Text == "")
                {
                    MessageBox.Show("Bạn chưa chọn chức vụ của nhân viên !");
                    return false;
                }

                if (CongViecCb.EditValue == null || CongViecCb.Text == "")
                {
                    MessageBox.Show("Bạn chưa chọn công việc của nhân viên !");
                    return false;
                }

                if (BoPhanCb.EditValue == null || BoPhanCb.Text == "")
                {
                    MessageBox.Show("Bạn chưa chọn bộ phận làm việc của nhân viên !");
                    return false;
                }

                if (NgayLamTb.EditValue == null || NgayLamTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số ngày làm của nhân viên !");
                    return false;
                }
                else
                {
                    if (Convert.ToInt32(NgayLamTb.EditValue) < 0)
                    {
                        MessageBox.Show("Số ngày làm của nhân viên phải lớn hơn hoặc bằng 0!");
                        return false;
                    }
                }

                if (NgayNghiTb.EditValue == null || NgayNghiTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số ngày nghỉ của nhân viên !");
                    return false;
                }
                else
                {
                    if (Convert.ToInt32(NgayNghiTb.EditValue) < 0)
                    {
                        MessageBox.Show("Số ngày nghỉ của nhân viên phải lớn hơn hoặc bằng 0!");
                        return false;
                    }
                }

                if (NgayTreTb.EditValue == null || NgayTreTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số ngày đi trễ của nhân viên !");
                    return false;
                }
                else
                {
                    if (Convert.ToInt32(NgayTreTb.EditValue) < 0)
                    {
                        MessageBox.Show("Số ngày đi trễ của nhân viên phải lớn hơn hoặc bằng 0!");
                        return false;
                    }
                    if (Convert.ToInt32(NgayTreTb.EditValue) > Convert.ToInt32(NgayLamTb.EditValue))
                    {
                        MessageBox.Show("Số ngày đi trễ của nhân viên phải nhỏ hơn hoặc bằng số ngày đi làm !");
                        return false;

                    }
                }

                if (KhienTrachTb.EditValue == null || KhienTrachTb.Text == "")
                {
                    MessageBox.Show("Bạn chưa điền số lần bị khiển trách của nhân viên !");
                    return false;
                }
                else
                {
                    if (Convert.ToInt32(KhienTrachTb.EditValue) < 0)
                    {
                        MessageBox.Show("Số lần bị khiển trách của nhân viên phải lớn hơn hoặc bằng 0!");
                        return false;
                    }
                }
                return true;
            }

            private void ChucVuCb_QueryPopUp(object sender, CancelEventArgs e)
            {
                DataTable ch = controller_NV.list_data("CHUCVU");
                ChucVuCb.Properties.Items.Clear();
                foreach (DataRow row in ch.Rows)
                {
                    ChucVuCb.Properties.Items.Add(row["TenChucVu"].ToString());
                }
            }

            private void CongViecCb_QueryPopUp(object sender, CancelEventArgs e)
            {
                DataTable cv = controller_NV.list_data("CONGVIEC");
                CongViecCb.Properties.Items.Clear();
                foreach (DataRow row in cv.Rows)
                {
                    CongViecCb.Properties.Items.Add(row["TenCongViec"].ToString());
                }
            }

            private void BoPhanCb_QueryPopUp(object sender, CancelEventArgs e)
            {
                DataTable bp = controller_NV.list_data("BOPHAN");
                BoPhanCb.Properties.Items.Clear();
                foreach (DataRow row in bp.Rows)
                {
                    BoPhanCb.Properties.Items.Add(row["TenBoPhan"].ToString());
                }
            }

            private void ThemNhanVienBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (check_NV())
                {
                    string[] data = new string[21];
                    if (get_nv_data(ref data))
                    {
                        try
                        {
                            if (controller_NV.add_nhanvien(data))
                            {
                                clear_NhanVien();
                                this.list_NV_data();
                            }
                        }
                        catch (SystemException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                    NV_ID = "";
                }
            }

            private void clear_NhanVien()
            {
                MaNhanVienTb.EditValue = null;
                ChucVuCb.EditValue = null;
                CongViecCb.EditValue = null;
                BoPhanCb.EditValue = null;
                HoTenTb.EditValue = null;
                NgaySinhDp.EditValue = null;
                QueQuanTb.EditValue = null;
                DiaChiTTTb.EditValue = null;
                DiaChiHNTb.EditValue = null;
                DienThoaiTb.EditValue = null;
                NgayLamDp.EditValue = null;
                TrinhDoNVTb.EditValue = null;
                SoHopDongTb.EditValue = null;
                ThoiHanHDDp.EditValue = null;
                LuongHienTaiTb.EditValue = null;
                LuongKhoiDiemTb.EditValue = null;
                NgayKyHDDp.EditValue = null;
                NgayLamTb.EditValue = 0;
                NgayNghiTb.EditValue = 0;
                NgayTreTb.EditValue = 0;
                KhienTrachTb.EditValue = 0;
            }

            private bool get_nv_data(ref string[] data)
            {
                data[0] = MaNhanVienTb.Text;
                data[1] = controller_NV.get_id("CHUCVU", "ChucVu", ChucVuCb.Text);
                if (data[1] == "")
                {
                    MessageBox.Show("Chức vụ không có thực !");
                    return false;
                }
                data[2] = controller_NV.get_id("BOPHAN", "BoPhan", BoPhanCb.Text);
                if (data[2] == "")
                {
                    MessageBox.Show("Bộ Phận không có thực !");
                    return false;
                }
                data[3] = controller_NV.get_id("CONGVIEC", "CongViec", CongViecCb.Text);
                if (data[3] == "")
                {
                    MessageBox.Show("Công Việc không có thực !");
                    return false;
                }
                data[4] = HoTenTb.Text;
                data[5] = NgaySinhDp.Text;
                data[6] = QueQuanTb.Text;
                data[7] = DiaChiTTTb.Text;
                data[8] = DiaChiHNTb.Text;
                data[9] = DienThoaiTb.Text;
                data[10] = NgayLamDp.Text;
                data[11] = TrinhDoNVTb.Text;
                data[12] = SoHopDongTb.Text;
                data[13] = ThoiHanHDDp.Text;
                data[14] = LuongHienTaiTb.Text;
                data[15] = LuongKhoiDiemTb.Text;
                data[16] = NgayKyHDDp.Text;
                data[17] = NgayLamTb.Text;
                data[18] = NgayNghiTb.Text;
                data[19] = NgayTreTb.Text;
                data[20] = KhienTrachTb.Text;
                return true;
            }

            private void LuongKhoiDiemTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void LuongHienTaiTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void NgayLamTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void NgayNghiTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void NgayTreTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void KhienTrachTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void DienThoaiTb_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                    e.Handled = true;

            }

            private void XoaNhanVienBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListNhanVien.GetFocusedDataSourceRowIndex() < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá thông tin nhân viên này cùng với các thông tin về bảng lương của nhân viên này không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                try
                {
                    if (controller_NV.del_nhanvien(ListNhanVien.GetRowCellValue(ListNhanVien.GetFocusedDataSourceRowIndex(), "NhanVienID").ToString()))
                    {
                        MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }

                clear_NhanVien();
                this.list_NV_data();
            }

            private void NhanVienListView_DoubleClick(object sender, EventArgs e)
            {
                if (ListNhanVien.FocusedRowHandle >= 0)
                {
                    DataTable data = controller_NV.get_nhanvien(ListNhanVien.GetRowCellValue(ListNhanVien.GetFocusedDataSourceRowIndex(), "NhanVienID").ToString());
                    if (data != null)
                    {
                        try
                        {
                            NV_ID = ListNhanVien.GetRowCellValue(ListNhanVien.GetFocusedDataSourceRowIndex(), "NhanVienID").ToString();
                            DataRow row = data.Rows[0];
                            MaNhanVienTb.EditValue = row["MaNhanVien"];
                            ChucVuCb.EditValue = row["TenChucVu"];
                            CongViecCb.EditValue = row["TenCongViec"];
                            BoPhanCb.EditValue = row["TenBoPhan"];
                            HoTenTb.EditValue = row["HoTen"];
                            NgaySinhDp.EditValue = row["NgaySinh"];
                            QueQuanTb.EditValue = row["QueQuan"];
                            DiaChiTTTb.EditValue = row["DiaChiThuongTru"];
                            DiaChiHNTb.EditValue = row["DiaChiHienNay"];
                            DienThoaiTb.EditValue = row["DienThoai"];
                            NgayLamDp.EditValue = row["NgayVaoLam"];
                            TrinhDoNVTb.EditValue = row["TrinhDo"];
                            SoHopDongTb.EditValue = row["SoHopDong"];
                            ThoiHanHDDp.EditValue = row["ThoiHanHopDong"];
                            LuongHienTaiTb.EditValue = row["MucLuongHienTai"];
                            LuongKhoiDiemTb.EditValue = row["MucLuongKhoiDiem"];
                            NgayKyHDDp.EditValue = row["NgayKyHopDong"];
                            NgayLamTb.EditValue = row["SoNgayDiLam"];
                            NgayNghiTb.EditValue = row["NghiKhongPhep"];
                            NgayTreTb.EditValue = row["SoNgayDiTre"];
                            KhienTrachTb.EditValue = row["SoLanBiKhienTrach"];
                        }
                        catch (SystemException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
            }

            private void SuaNhanVienBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (NV_ID == "")
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn sửa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                if (check_NV())
                {
                    string[] data = new string[22];
                    if (get_nv_data(ref data))
                    {
                        data[21] = NV_ID;
                        try
                        {
                            if (controller_NV.update_nhanvien(data))
                            {
                                MessageBox.Show("Bạn đã sửa thành công !", "Thông báo");
                                this.list_NV_data();
                                clear_NhanVien();
                                NV_ID = "";
                            }
                        }
                        catch (SystemException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
            }

            #endregion
            /*-------------------------------------------------------*/
   /*====================================================================================*/


    /*======================================= Hoá Đơn ===================================*/
         #region HOA DON
            private void list_HD_data()
            {
                DataTable data = controller_HD.list_hd();
                if (data != null)
                {
                    try
                    {
                        HoaDonListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void list_CTTHD_data(string ma_hd)
            {
                DataTable data = controller_HD.list_cthd(ma_hd);
                if (data != null)
                {
                    try
                    {
                        MHHoaDonListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

            private void MaNhanVienHDCb_ShowingEditor(object sender, ItemCancelEventArgs e)
            {
                DataTable nv = controller_HD.get_ma("NHANVIEN","NhanVien");
                MaNhanVienHDPt.Items.Clear();
                foreach (DataRow row in nv.Rows)
                {
                    MaNhanVienHDPt.Items.Add(row["MaNhanVien"].ToString());
                }
            }

            private void MaMatHangHDCb_ShowingEditor(object sender, ItemCancelEventArgs e)
            {
                DataTable mh = controller_HD.get_ma("MATHANG", "MatHang");
                MaMatHangHDPt.Items.Clear();
                foreach (DataRow row in mh.Rows)
                {
                    MaMatHangHDPt.Items.Add(row["MaMatHang"].ToString());
                }
            }

            private void PTThanhToanCb_ShowingEditor(object sender, ItemCancelEventArgs e)
            {
                DataTable pttt = controller_HD.list_pttt();
                PTThanhToanPt.Items.Clear();
                foreach (DataRow row in pttt.Rows)
                {
                    PTThanhToanPt.Items.Add(row["TenPhuongThucTT"].ToString());
                }
            }

            private void MaMatHangHDCb_EditValueChanged(object sender, EventArgs e)
            {
                if (MaMatHangHDCb.EditValue != null)
                {
                    DataTable mh = controller_HD.get_mathang(MaMatHangHDCb.EditValue.ToString());
                    DataRow row = mh.Rows[0];
                    TenMatHangHDTb.EditValue = row["TenMatHang"];
                }
                else
                {
                    TenMatHangHDTb.EditValue = null;

                }
            }

            private void ThemMatHangHDBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (MaMatHangHDCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn mã mặt hàng", "Thông báo");
                    return;
                }
                else
                {
                    for (int i = 0; i < ListMHHoaDon.RowCount; i++)
                    {
                        string temp = ListMHHoaDon.GetRowCellValue(i, "MaMatHang").ToString();
                        
                        if (string.Compare(MaMatHangHDCb.EditValue.ToString(),temp) == 0)
                        {
                            MessageBox.Show("Mặt hàng này đã được thêm vào hoá đơn rồi !","Thông báo");
                            return;
                        }
                    }
                }
                if (SoLuongHDTb.EditValue == null || Convert.ToInt32(SoLuongHDTb.EditValue) < 1)
                {
                    MessageBox.Show("Số lượng mặt hàng không thể để trống hoặc ít hơn 1", "Thông báo");
                    return;
                }
                if (VATTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền VAT của mặt hàng !", "Thông báo");
                    return;
                }
                DataTable mh = controller_HD.get_mathang(MaMatHangHDCb.EditValue.ToString());
                double temp1 = 0;
                temp1 = Convert.ToDouble(mh.Rows[0]["GiaBanThuc"]) * Convert.ToDouble(SoLuongHDTb.EditValue) * (1 + Convert.ToDouble(Convert.ToDouble(VATTb.EditValue) / 100));
                if (temp1 >= 999999999999)
                {
                    MessageBox.Show("Số tiền quá lớn không thể tính toán","Thông báo");
                    return;
                }
                this.MHHoaDonListView.DataSource = this.dataTable;
                ListMHHoaDon.AddNewRow();
                ListMHHoaDon.UpdateCurrentRow();
                MaMatHangHDCb.EditValue = null;
            }

            private DataTable dataTable = new DataTable();

            private void init_table_HD()
            {
                for (int i = 0; i < ListMHHoaDon.Columns.Count; i++)
                {
                    this.dataTable.Columns.Add(ListMHHoaDon.Columns[i].FieldName, typeof(string));
                }
            }

            private void ListMHHoaDon_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
            {

                DataTable mh = controller_HD.get_mathang(MaMatHangHDCb.EditValue.ToString());
                if (mh != null)
                {
                    DataRow row = mh.Rows[0];
                    for (int i = 0; i < ListMHHoaDon.Columns.Count; i++)
                    {
                        if(ListMHHoaDon.Columns[i].FieldName == "SoLuong")
                            ListMHHoaDon.SetRowCellValue(e.RowHandle, ListMHHoaDon.Columns[i].FieldName, SoLuongHDTb.EditValue.ToString());
                        else if (ListMHHoaDon.Columns[i].FieldName == "VAT")
                            ListMHHoaDon.SetRowCellValue(e.RowHandle, ListMHHoaDon.Columns[i].FieldName, VATTb.EditValue.ToString());
                        else if (ListMHHoaDon.Columns[i].FieldName == "ThanhTien")
                        {
                            long tien = 0;
                            double temp = 0;
                            temp = Convert.ToDouble(row["GiaBanThuc"]) * Convert.ToDouble(SoLuongHDTb.EditValue) * (1 + Convert.ToDouble(Convert.ToDouble(VATTb.EditValue) / 100));
                            tien = (long)temp;
                            ListMHHoaDon.SetRowCellValue(e.RowHandle, ListMHHoaDon.Columns[i].FieldName, tien.ToString());
                        }
                        else
                            ListMHHoaDon.SetRowCellValue(e.RowHandle, ListMHHoaDon.Columns[i].FieldName, row[ListMHHoaDon.Columns[i].FieldName]);
                    }

                }
            }

            private void XoaMatHangHDBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListMHHoaDon.GetFocusedDataSourceRowIndex() < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá mặt hàng này không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                ListMHHoaDon.DeleteRow(ListMHHoaDon.FocusedRowHandle);

            }

            private void TaoHoaDonBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (TaoHoaDonBtn.Caption == "Tạo Hóa Đơn")
                {
                    TaoHoaDonBtn.Caption = "Lưu Hoá Đơn";
                    XoaHoaDonBtn.Caption = "Huỷ Hoá Đơn";
                    dataTable = new DataTable();
                    set_hd(true);
                    MHHoaDonListView.DataSource = dataTable;
                }
                else
                {
                    if (ListMHHoaDon.RowCount == 0)
                    {
                        MessageBox.Show("Bạn phải thêm ít nhất 1 sản phẩm vào hoá đơn","Thông báo");
                        return;
                    }

                    try
                    {
                        if (check_HD())
                        {
                            string[] data = new string[8];
                            data[0] = MaHoaDonTb.EditValue.ToString();
                            data[1] = controller_HD.get_pttt_id(PTThanhToanCb.EditValue.ToString());
                            if (data[1] == "")
                            {
                                MessageBox.Show("Mã nhân viên không có thực !", "Thông báo");
                                return;
                            }
                            DataTable temp = controller_HD.get_nhanvien(MaNhanVienHDCb.EditValue.ToString());
                            if (temp == null)
                            {
                                MessageBox.Show("Phương pháp thanh toán không có thực !", "Thông báo");
                                return;
                            }
                            data[2] = temp.Rows[0]["NhanVienID"].ToString();
                            data[3] = temp.Rows[0]["HoTen"].ToString();
                            data[4] = NgayXuatHDDp.EditValue.ToString();
                            data[5] = MaQuayHDTb.EditValue.ToString();
                            data[6] = TongTienHDTb.EditValue.ToString();
                            if (MaTheTDTb.EditValue == null)
                                data[7] = "";
                            else
                                data[7] = MaTheTDTb.EditValue.ToString();
                            if (controller_HD.add_hd(data))
                            {
                                string[] data1 = new string[14];
                                for (int j = 0; j < ListMHHoaDon.RowCount; j++)
                                {
                                    data1[0] = controller_HD.get_hd_id(MaHoaDonTb.EditValue.ToString());
                                    data1[1] = ListMHHoaDon.GetRowCellValue(j, "MatHangID").ToString();
                                    data1[2] = ListMHHoaDon.GetRowCellValue(j, "TenMatHang").ToString();
                                    data1[3] = ListMHHoaDon.GetRowCellValue(j, "SoLuong").ToString();
                                    data1[4] = ListMHHoaDon.GetRowCellValue(j, "GiaBanThuc").ToString();
                                    data1[5] = ListMHHoaDon.GetRowCellValue(j, "VAT").ToString();
                                    data1[6] = ListMHHoaDon.GetRowCellValue(j, "ThanhTien").ToString();
                                    data1[7] = controller_MH.get_ma_cl(ListMHHoaDon.GetRowCellValue(j, "TenChungLoai").ToString());
                                    data1[8] = controller_MH.get_ma_dvt(ListMHHoaDon.GetRowCellValue(j, "TenDonViTinh").ToString());
                                    data1[9] = ListMHHoaDon.GetRowCellValue(j, "NhaSanXuat").ToString();
                                    data1[10] = ListMHHoaDon.GetRowCellValue(j, "NhaPhanPhoi").ToString();
                                    data1[11] = ListMHHoaDon.GetRowCellValue(j, "GiaNhap").ToString();
                                    data1[12] = ListMHHoaDon.GetRowCellValue(j, "KhuyenMai").ToString();
                                    data1[13] = ListMHHoaDon.GetRowCellValue(j, "GiaTruocKhuyenMai").ToString();

                                    controller_HD.add_cthd(data1);
                                }

                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                        return;
                    }

                    TaoHoaDonBtn.Caption = "Tạo Hóa Đơn";
                    XoaHoaDonBtn.Caption = "Xóa Hóa Đơn";
                    set_hd(false);
                    this.list_HD_data();
                }

            }

            private bool check_HD()
            {
                if (MaHoaDonTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền Mã Hoá Đơn !", "Thông báo");
                    return false;
                }

                if (NgayXuatHDDp.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền ngày xuất hoá đơn !", "Thông báo");
                    return false;
                }
                else
                {
                    if (DateTime.Compare(Convert.ToDateTime(NgayXuatHDDp.EditValue), DateTime.Now) > 0)
                    {
                        MessageBox.Show("Ngày xuất hoá đơn không thể lớn hơn ngày hiện tại !");
                        return false;
                    }
 
                }

                if (MaQuayHDTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền mã số quầy thanh toán !", "Thông báo");
                    return false;
                }

                if (TongTienHDTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền số tiền phải trả của khách hàng!", "Thông báo");
                    return false;
                }

                if (MaNhanVienHDCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền mã nhân viên !", "Thông báo");
                    return false;
                }

                if (PTThanhToanCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền phương thức thanh toán !", "Thông báo");
                    return false;
                }

                return true;
            }

            private void ListMHHoaDon_RowCountChanged(object sender, EventArgs e)
            {
                if (ListMHHoaDon.RowCount == 0)
                {
                    TongTienHDTb.EditValue = 0;
                }
                else
                {
                    long tien = 0;
                    for (int i = 0; i < ListMHHoaDon.RowCount; i++)
                    {
                        tien = tien + Convert.ToInt64(ListMHHoaDon.GetRowCellValue(i, "ThanhTien"));
                    }

                    TongTienHDTb.EditValue = tien;
                }
            }

            private void set_hd(bool bat_tat)
            {
                MaMatHangHDCb.Enabled = bat_tat;
                TenMatHangHDTb.Enabled = bat_tat;
                ThemMatHangHDBtn.Enabled = bat_tat;
                XoaMatHangHDBtn.Enabled = bat_tat;
                SoLuongHDTb.Enabled = bat_tat;
                MaHoaDonTb.Enabled = bat_tat;
                VATTb.Enabled = bat_tat;
                NgayXuatHDDp.Enabled = bat_tat;
                MaQuayHDTb.Enabled = bat_tat;
                MaTheTDTb.Enabled = bat_tat;
                TongTienHDTb.Enabled = bat_tat;
                MaNhanVienHDCb.Enabled = bat_tat;
                PTThanhToanCb.Enabled = bat_tat;

                InHoaDonBtn.Enabled = !bat_tat;
                HoaDonListView.Enabled = !bat_tat;
                if (bat_tat == false)
                {
                    dataTable = new DataTable();
                    MHHoaDonListView.DataSource = dataTable;
                    TongTienHDTb.EditValue = null;
                    MaHoaDonTb.EditValue = null;
                    NgayXuatHDDp.EditValue = null;
                    MaQuayHDTb.EditValue = null;
                    MaTheTDTb.EditValue = null;
                    MaNhanVienHDCb.EditValue = null;
                    PTThanhToanCb.EditValue = null;
                }
                else
                {
                    init_table_HD();
                }
            }

            private void XoaHoaDonBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (XoaHoaDonBtn.Caption == "Huỷ Hoá Đơn")
                {
                    TaoHoaDonBtn.Caption = "Tạo Hóa Đơn";
                    XoaHoaDonBtn.Caption = "Xóa Hóa Đơn";
                    set_hd(false);
                }
                else
                {
                    if (ListHoaDon.GetFocusedDataSourceRowIndex() < 0)
                        return;

                    if (MessageBox.Show("Bạn có thực sự muốn xoá Hoá Đơn này không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                        return;

                    try
                    {
                        if (controller_HD.del_hd(ListHoaDon.GetRowCellValue(ListHoaDon.GetFocusedDataSourceRowIndex(), "HoaDonID").ToString()))
                        {
                            MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                            list_HD_data();
                            DataTable t = new DataTable();
                            MHHoaDonListView.DataSource = t;
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }

                }

            }

            private void HoaDonListView_Click(object sender, EventArgs e)
            {
                if (ListHoaDon.FocusedRowHandle >= 0)
                {
                    string id = ListHoaDon.GetRowCellValue(ListHoaDon.GetFocusedDataSourceRowIndex(), "HoaDonID").ToString();
                    list_CTTHD_data(id);
                }
            }

            private void InHoaDonBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListMHHoaDon.RowCount == 0)
                {
                    if (ListHoaDon.FocusedRowHandle >= 0)
                    {
                        string id = ListHoaDon.GetRowCellValue(ListHoaDon.GetFocusedDataSourceRowIndex(), "HoaDonID").ToString();
                        list_CTTHD_data(id);
                    }
                    else
                    {
                        MessageBox.Show("Bạn phải chọn vào hoá đơn muốn in !", "Thông báo");
                        return;
                    }
                }
                if (ListHoaDon.FocusedRowHandle >= 0)
                {
                    DataRow row = ListHoaDon.GetFocusedDataRow();
                    this.print_hoadon((DataTable)MHHoaDonListView.DataSource, row);

                }
            }

            #endregion
    /*========================================================================================*/


    /*======================================= Bảng Lương ===================================*/
            #region THAM SO
            private void list_thamso()
            {
                DataTable data = controller_BL.get_thamso();
                if (data != null)
                {
                    try
                    {
                        DataRow row = data.Rows[0];
                        HSPhatNghiTb.EditValue = row["PhatNghi"];
                        HSPhatTreTb.EditValue = row["PhatDiTre"];
                        HSPhatTrachTb.EditValue = row["PhatKhienTrach"];
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

            private void CapNhatHSBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (HSPhatNghiTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền hệ số phạt nghỉ !", "Thông báo");
                    return;
                }
                else
                {
                    if (Convert.ToInt32(HSPhatNghiTb.EditValue) < 0)
                    {
                        MessageBox.Show("Hệ số phạt nghỉ phải lớn hơn hoặc bằng 0!", "Thông báo");
                        return;
                    }
                }

                if (HSPhatTreTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền hệ số phạt trễ !", "Thông báo");
                    return;
                }
                else
                {
                    if (Convert.ToInt32(HSPhatTreTb.EditValue) < 0)
                    {
                        MessageBox.Show("Hệ số phạt trễ phải lớn hơn hoặc bằng 0!", "Thông báo");
                        return;
                    }
                }

                if (HSPhatTrachTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền hệ số phạt khiển trách !", "Thông báo");
                    return;
                }
                else
                {
                    if (Convert.ToInt32(HSPhatTrachTb.EditValue) < 0)
                    {
                        MessageBox.Show("Hệ số phạt khiển trách phải lớn hơn hoặc bằng 0!", "Thông báo");
                        return;
                    }
                }

                try
                {
                    if (controller_BL.update_thamso(HSPhatNghiTb.EditValue.ToString(), HSPhatTreTb.EditValue.ToString(), HSPhatTrachTb.EditValue.ToString()))
                    {
                        MessageBox.Show("Bạn đã cập nhật thành công !", "Thông báo");
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            #endregion

            #region BANG LUONG
            private void Show_BL()
            {
                string date = controller_BL.get_date();
                if (date != "")
                {
                    ThangCb.EditValue = date.Substring(0, 2);
                    NamCb.EditValue = date.Substring(2, 4);
                    xem_luong();
                }
            }

            private void TaoLuongBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                string thang_nam = DateTime.Now.ToString("MMyyyy");
                if (controller_BL.check_bangluong(thang_nam))
                {
                    if (controller_BL.make_bangluong(thang_nam))
                    {
                        MessageBox.Show("Bảng Lương của tháng " + DateTime.Now.ToString("MM") + " năm " + DateTime.Now.ToString("yyyy") + " đã được tạo thành công !", "Thông báo");
                        ThangCb.EditValue = DateTime.Now.ToString("MM");
                        NamCb.EditValue = DateTime.Now.ToString("yyyy");
                        xem_luong();
                    }
                    else
                        MessageBox.Show("Lỗi trong quá trình tạo bảng lương,vui lòng làm lại !", "Thông báo");
                }
                else
                {
                    MessageBox.Show("Bảng Lương của tháng " + DateTime.Now.ToString("MM") + " năm " + DateTime.Now.ToString("yyyy") + " đã có trong database !", "Thông báo");
                }
            }

            private void XemLuongBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                xem_luong();
            }

            private void xem_luong()
            {
                if (ThangCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn tháng !", "Thông báo");
                    return;

                }

                if (NamCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn năm !", "Thông báo");
                    return;

                }

                string thang_nam = ThangCb.EditValue.ToString() + NamCb.EditValue.ToString();
                DataTable data = controller_BL.get_bangluong(thang_nam);
                if (data != null)
                {
                    try
                    {
                        BangLuongListView.DataSource = data;
                        ListBangLuong.UpdateCurrentRow();
                        string temp, temp1, temp2;

                        temp = ListBangLuong.GetRowCellValue(0, "ThangNam").ToString();
                        temp1 = temp.Substring(0, 2);
                        temp2 = temp.Substring(2, 4);
                        for (int i = 0; i < ListBangLuong.RowCount; i++)
                        {
                            ListBangLuong.SetRowCellValue(i, "ThangNam", temp1 + "-" + temp2);
                        }
                        ListBangLuong.UpdateCurrentRow();

                        XoaLuongBtn.Enabled = true;
                        InLuongBtn.Enabled = true;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                else
                {
                    MessageBox.Show("Không tồn tại bảng lương tháng " + ThangCb.EditValue.ToString() + " năm " + NamCb.EditValue.ToString() + " !", "Thông báo");
                }

            }
            private void XoaLuongBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                string thangnam = controller_BL.get_date();
                string temp = ListBangLuong.GetRowCellValue(0,"ThangNam").ToString();

                if (MessageBox.Show("Bạn có thực sự muốn xoá Bản Lương "+temp+" ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                string thang_nam = temp.Replace("-","");
                thangnam = thangnam.Trim();
                if (string.Compare(thang_nam, thangnam) == 0)
                {
                    MessageBox.Show("Bạn không thể xoá bảng lương mới nhất !", "Thông báo");
                    return;
                }

                try
                {
                    if (controller_BL.del_bangluong(thang_nam))
                    {
                        MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                        DataTable bl = new DataTable();
                        BangLuongListView.DataSource = bl;
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void InLuongBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListBangLuong.FocusedRowHandle < 0)
                {
                    MessageBox.Show("Bạn phải chọn nhân viên cần in bảng lương !","Thông báo");
                    return;
                }
                else
                {
                    this.print_bangluong(ListBangLuong.GetFocusedDataRow());
                }
            }

            #endregion

    /*========================================================================================*/


    /*======================================= Kho ===================================*/
            #region KHO
            string K_ID = "";
            private void list_K_data()
            {
                DataTable data = controller_K.list_k();
                if (data != null)
                {
                    try
                    {

                        KhoListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void list_K_MH_data(string kho_id)
            {
                DataTable data = controller_K.list_mh_k(kho_id);
                if (data != null)
                {
                    try
                    {
                        MatHangKhoListView.DataSource = data;
                        MaMatHangKhoPt.Items.Clear();
                        foreach (DataRow row in data.Rows)
                        {
                            MaMatHangKhoPt.Items.Add(row["MaMatHang"]);
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void KhoListView_DoubleClick(object sender, EventArgs e)
            {
                if (ListKho.FocusedRowHandle >= 0)
                {
                    K_ID = ListKho.GetRowCellValue(ListKho.GetFocusedDataSourceRowIndex(), "KhoID").ToString();
                    MaKhoTb.EditValue = ListKho.GetRowCellValue(ListKho.GetFocusedDataSourceRowIndex(), "MaKho").ToString();
                    TenKhoTb.EditValue = ListKho.GetRowCellValue(ListKho.GetFocusedDataSourceRowIndex(), "TenKho").ToString();
                    DiaChiKhoTb.EditValue = ListKho.GetRowCellValue(ListKho.GetFocusedDataSourceRowIndex(), "DiaChiKho").ToString();
                    DienTichKhoTb.EditValue = ListKho.GetRowCellValue(ListKho.GetFocusedDataSourceRowIndex(), "DienTichKho").ToString();
                    list_K_MH_data(K_ID);
                    MaMatHangKhoCb.EditValue = null;
                    TonToiThieuTb.EditValue = null;
                    set_kh(false);
                }
            }

            private void KhoListView_Click(object sender, EventArgs e)
            {
                list_K_MH_data(ListKho.GetFocusedRowCellValue("KhoID").ToString());
            }

            private void set_kh(bool bat_tat)
            {
                ThemKhoHangBtn.Enabled = bat_tat;
                XoaKhoHangBtn.Enabled = bat_tat;
                SuaKhoHangBtn.Enabled = !bat_tat;
                MaMatHangKhoCb.Enabled = !bat_tat;
                TonToiThieuTb.Enabled = !bat_tat;
                SuaMatHangKhoBtn.Enabled = !bat_tat;
                XoaMatHangKhoBtn.Enabled = !bat_tat;
                KhoListView.Enabled = bat_tat;
            }

            private void clear_kh()
            {
                MaKhoTb.EditValue = null;
                TenKhoTb.EditValue = null;
                DiaChiKhoTb.EditValue = null;
                DienTichKhoTb.EditValue = null;
                MaMatHangKhoCb.EditValue = null;
                MaMatHangKhoPt.Items.Clear();
                DataTable t = new DataTable();
                MatHangKhoListView.DataSource = t;

            }

            private void SuaKhoHangBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (K_ID == "")
                    return;

                if (check_kho())
                {
                    try
                    {
                        string[] data = new string[5];
                        data[0] = K_ID;
                        data[1] = MaKhoTb.EditValue.ToString();
                        data[2] = TenKhoTb.EditValue.ToString();
                        data[3] = DiaChiKhoTb.EditValue.ToString();
                        data[4] = DienTichKhoTb.EditValue.ToString();

                        if (controller_K.update_kho(data))
                        {
                            MessageBox.Show("Bạn đã sửa thành công !", "Thông báo");
                            K_ID = "";
                            set_kh(true);
                            clear_kh();
                            list_K_data();
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void MaMatHangKhoCb_EditValueChanged(object sender, EventArgs e)
            {
                if (MaMatHangKhoCb.EditValue == null)
                    TonToiThieuTb.EditValue = null;
                else
                {
                    string temp = controller_K.get_thongtin_mh(MaMatHangKhoCb.EditValue.ToString());
                    if (temp != "")
                        TonToiThieuTb.EditValue = temp;
                   
                    for (int i = 0; i < ListMatHangKho.RowCount; i++)
                    {
                        if (string.Compare(MaMatHangKhoCb.EditValue.ToString(), ListMatHangKho.GetRowCellValue(i, "MaMatHang").ToString()) == 0)
                            ListMatHangKho.FocusedRowHandle = i;
                    }
                }
            }

            private void SuaMatHangKhoBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (MaMatHangKhoCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn mã mặt hàng !", "Thông báo");
                    return;

                }

                if (TonToiThieuTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền số lượng tồn tối thiểu !", "Thông báo");
                    return;

                }

                if (Convert.ToInt32(TonToiThieuTb.EditValue) < 0)
                {
                    MessageBox.Show("Số lượng tồn tối thiểu phải lớn hơn hoặc bằng 0 !", "Thông báo");
                    return;

                }

                if (K_ID == "")
                {
                    return;
                }
                try
                {
                    if (controller_K.update_ton(K_ID,MaMatHangKhoCb.EditValue.ToString(), TonToiThieuTb.EditValue.ToString()))
                    {
                        MessageBox.Show("Bạn đã cập nhật thành công !", "Thông báo");
                        list_K_MH_data(K_ID);
                        TonToiThieuTb.EditValue = null;
                        MaMatHangKhoCb.EditValue = null;
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void XoaMatHangKhoBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListMatHangKho.FocusedRowHandle < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá mặt hàng này ra khỏi kho hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                try
                {
                    if (controller_K.del_mathang(ListMatHangKho.GetFocusedRowCellValue("MatHangID").ToString()))
                    {
                        list_K_MH_data(K_ID);
                        TonToiThieuTb.EditValue = null;
                        MaMatHangKhoCb.EditValue = null;
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void MatHangKhoListView_DoubleClick(object sender, EventArgs e)
            {
                if (ListMatHangKho.FocusedRowHandle >= 0 && SuaMatHangKhoBtn.Enabled == true)
                {
                    MaMatHangKhoCb.EditValue = ListMatHangKho.GetRowCellValue(ListMatHangKho.GetFocusedDataSourceRowIndex(), "MaMatHang").ToString();
                }
            }

            private bool check_kho()
            {
                if (MaKhoTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền mã kho !", "Thông báo");
                    return false;

                }

                if (TenKhoTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền tên kho !", "Thông báo");
                    return false;

                }

                if (DiaChiKhoTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền địa chỉ kho !", "Thông báo");
                    return false;

                }

                if (DienTichKhoTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền diện tích kho !", "Thông báo");
                    return false;

                }

                if (Convert.ToInt32(DienTichKhoTb.EditValue) <= 0)
                {
                    MessageBox.Show("Diện tích kho phải lớn hơn 0 !", "Thông báo");
                    return false;

                }

                return true;

            }

            private void ThemKhoHangBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (check_kho())
                {
                    try
                    {
                        string[] data = new string[5];
                        data[0] = K_ID;
                        data[1] = MaKhoTb.EditValue.ToString();
                        data[2] = TenKhoTb.EditValue.ToString();
                        data[3] = DiaChiKhoTb.EditValue.ToString();
                        data[4] = DienTichKhoTb.EditValue.ToString();

                        if (controller_K.add_kho(data))
                        {
                            MessageBox.Show("Bạn đã thêm thành công !", "Thông báo");
                            K_ID = "";
                            list_K_data();
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

            private void XoaKhoHangBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListKho.FocusedRowHandle < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá kho hàng này không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                try
                {
                    if (controller_K.del_kho(ListKho.GetFocusedRowCellValue("KhoID").ToString()))
                    {
                        K_ID = "";
                        list_K_data();
                    }
                }
                catch (SystemException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void ListMatHangKho_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
            {
                if (e.RowHandle >= 0)
                {
                    if (Convert.ToInt32(ListMatHangKho.GetRowCellValue(e.RowHandle, "SoLuongTonHienTai")) < Convert.ToInt32(ListMatHangKho.GetRowCellValue(e.RowHandle, "SoLuongTonToiThieu")))
                    {
                        e.Appearance.BackColor = Color.Salmon;
                        e.Appearance.BackColor2 = Color.Salmon;
                    }
                }

            }

            #endregion
    /*========================================================================================*/


    /*======================================= CHUNG TU ===================================*/
            #region CHUNG TU
            private void list_CT_data()
            {
                DataTable data = controller_CT.list_ct();
                if (data != null)
                {
                    try
                    {
                        DataTable temp = new DataTable();
                        for (int i = 0; i < data.Columns.Count; i++)
                        {
                            if(data.Columns[i].ColumnName == "LoaiChungTu")
                                temp.Columns.Add(data.Columns[i].ColumnName, typeof(string));
                            else
                                temp.Columns.Add(data.Columns[i].ColumnName, data.Columns[i].DataType);
                        }
                        foreach (DataRow row in data.Rows)
                        {
                            temp.ImportRow(row);
                        }
                        ChungTuListView.DataSource = temp;

                        for (int i = 0; i < ListChungTu.RowCount; i++)
                        {
                            if (string.Compare(ListChungTu.GetRowCellValue(i, "LoaiChungTu").ToString(), "True") == 0)
                                ListChungTu.SetRowCellValue(i, "LoaiChungTu", "Xuất");
                            else
                                ListChungTu.SetRowCellValue(i, "LoaiChungTu", "Nhập");
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }

            private void list_CTCT_data(string ct_id)
            {
                DataTable data = controller_CT.list_ctct(ct_id);
                if (data != null)
                {
                    try
                    {
                        MatHangCTListView.DataSource = data;
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

            private void MaMatHangCTCb_ShowingEditor(object sender, ItemCancelEventArgs e)
            {
                DataTable mh = controller_HD.get_ma("MATHANG", "MatHang");
                MaMatHangCTPt.Items.Clear();
                foreach (DataRow row in mh.Rows)
                {
                    MaMatHangCTPt.Items.Add(row["MaMatHang"].ToString());
                }
            }

            private void set_CT(bool bat_tat)
            {
                MaChungTuTb.Enabled = bat_tat;
                NgayLapCTDp.Enabled = bat_tat;
                MaNhanVienCTCb.Enabled = bat_tat;
                MaKhoCTCb.Enabled = bat_tat;
                NgayXuatNhatDp.Enabled = bat_tat;
                LoaiChungTuCb.Enabled = bat_tat;
                MaMatHangCTCb.Enabled = bat_tat;
                TenMatHangCTTb.Enabled = bat_tat;
                NhaPhanPhoiCTTb.Enabled = bat_tat;
                SoLuongCTTb.Enabled = bat_tat;
                ThemMatHangCTBtn.Enabled = bat_tat;
                XoaMatHangCTBtn.Enabled = bat_tat;

                InChungTuBtn.Enabled = !bat_tat;
                ChungTuListView.Enabled = !bat_tat;

                if (bat_tat == true)
                    init_table_CT();
                else
                    list_CT_data();
            }

            private void MaNhanVienCTCb_ShowingEditor(object sender, ItemCancelEventArgs e)
            {
                DataTable nv = controller_HD.get_ma("NHANVIEN", "NhanVien");
                MaNhanVienCTPt.Items.Clear();
                foreach (DataRow row in nv.Rows)
                {
                    MaNhanVienCTPt.Items.Add(row["MaNhanVien"].ToString());
                }
            }

            private void MaKhoCTCb_ShowingEditor(object sender, ItemCancelEventArgs e)
            {
                DataTable kho = controller_HD.get_ma("KHO", "Kho");
                MaKhoCTCbPt.Items.Clear();
                foreach (DataRow row in kho.Rows)
                {
                    MaKhoCTCbPt.Items.Add(row["MaKho"].ToString());
                }
            }

            private void clear_CT()
            {
                MaChungTuTb.EditValue = null;
                NgayLapCTDp.EditValue = null;
                MaNhanVienCTCb.EditValue = null;
                MaKhoCTCb.EditValue = null;
                NgayXuatNhatDp.EditValue = null;
                LoaiChungTuCb.EditValue = null;
                MaMatHangCTCb.EditValue = null;
                TenMatHangCTTb.EditValue = null;
                NhaPhanPhoiCTTb.EditValue = null;
                SoLuongCTTb.EditValue = 1;

                this.dataTable2 = new DataTable();
                MatHangCTListView.DataSource = this.dataTable2;
            }

            private void TaoChungTuBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (TaoChungTuBtn.Caption == "  Tạo   Chứng Từ")
                {
                    TaoChungTuBtn.Caption = "  Lưu   Chứng Từ";
                    XoaChungTuBtn.Caption = "   Huỷ   Chứng Từ";
                    clear_CT();
                    set_CT(true);
                }
                else
                {
                    if (ListMatHangCT.RowCount == 0)
                    {
                        MessageBox.Show("Bạn phải thêm ít nhất 1 sản phẩm vào chứng từ !", "Thông báo");
                        return;
                    }

                    try
                    {
                        if (check_CT())
                        {
                            string[] data = new string[7];
                            data[0] = MaChungTuTb.EditValue.ToString();
                            data[1] = controller_CT.get_id(MaKhoCTCb.EditValue.ToString(),"KHO","Kho");
                            if (data[1] == "")
                            {
                                MessageBox.Show("Mã kho không có thực !", "Thông báo");
                                return;
                            }

                            DataTable temp = controller_HD.get_nhanvien(MaNhanVienCTCb.EditValue.ToString());
                            if (temp == null)
                            {
                                MessageBox.Show("Mã nhân viên không có thực !", "Thông báo");
                                return;
                            }
                            data[2] = temp.Rows[0]["NhanVienID"].ToString();
                            data[3] = temp.Rows[0]["HoTen"].ToString();
                            data[4] = NgayLapCTDp.EditValue.ToString();
                            data[5] = NgayXuatNhatDp.EditValue.ToString();
                            data[6] = LoaiChungTuCb.EditValue.ToString();

                            if (controller_CT.add_ct(data))
                            {
                                string[] data1 = new string[4];
                                string[] data2 = new string[5];
                                for (int j = 0; j < ListMatHangCT.RowCount; j++)
                                {
                                    data1[0] = controller_CT.get_id(MaChungTuTb.EditValue.ToString(),"CHUNGTU","ChungTu");
                                    data1[1] = ListMatHangCT.GetRowCellValue(j, "MatHangID").ToString();
                                    data1[2] = ListMatHangCT.GetRowCellValue(j, "TenMatHang").ToString();
                                    data1[3] = ListMatHangCT.GetRowCellValue(j, "SoLuongNhapXuat").ToString();

                                    controller_CT.add_ctct(data1);

                                    data2[0] = data[1];
                                    data2[1] = data1[1];
                                    data2[2] = data1[3];
                                    data2[3] = data[5];
                                    data2[4] = data[6];

                                    controller_CT.luu_kho(data2);
                                }

                            }
                        }
                        else
                        {
                            return;
                        }


                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                        return;
                    }

                    TaoChungTuBtn.Caption = "  Tạo   Chứng Từ";
                    XoaChungTuBtn.Caption = "   Xóa   Chứng Từ";

                    set_CT(false);
                    clear_CT();
                }
            }

            private void XoaChungTuBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (XoaChungTuBtn.Caption == "   Huỷ   Chứng Từ")
                {
                    TaoChungTuBtn.Caption = "  Tạo   Chứng Từ";
                    XoaChungTuBtn.Caption = "   Xóa   Chứng Từ";
                    set_CT(false);
                    clear_CT();
                }
                else
                {
                    if (ListChungTu.GetFocusedDataSourceRowIndex() < 0)
                        return;

                    if (MessageBox.Show("Bạn có thực sự muốn xoá Chứng Từ này không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                        return;

                    try
                    {
                        if (controller_CT.del_ct(ListChungTu.GetFocusedRowCellValue("ChungTuID").ToString()))
                        {
                            MessageBox.Show("Bạn đã xoá thành công !", "Thông báo");
                            list_CT_data();
                            DataTable t = new DataTable();
                            MatHangCTListView.DataSource = t;
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

            private void MaMatHangCTCb_EditValueChanged(object sender, EventArgs e)
            {
                if (MaMatHangCTCb.EditValue != null)
                {
                    DataTable mh = controller_HD.get_mathang(MaMatHangCTCb.EditValue.ToString());
                    DataRow row = mh.Rows[0];
                    TenMatHangCTTb.EditValue = row["TenMatHang"];
                    NhaPhanPhoiCTTb.EditValue = row["NhaPhanPhoi"];
                }
                else
                {
                    TenMatHangCTTb.EditValue = null;
                    NhaPhanPhoiCTTb.EditValue = null;

                }
            }

            private void ThemMatHangCTBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (MaMatHangCTCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn mã mặt hàng", "Thông báo");
                    return;
                }
                else
                {
                    for (int i = 0; i < ListMatHangCT.RowCount; i++)
                    {
                        string temp = ListMatHangCT.GetRowCellValue(i, "MaMatHang").ToString();

                        if (string.Compare(MaMatHangCTCb.EditValue.ToString(), temp) == 0)
                        {
                            MessageBox.Show("Mặt hàng này đã được thêm vào chứng từ rồi !", "Thông báo");
                            return;
                        }
                    }
                }
                if (SoLuongCTTb.EditValue == null || Convert.ToInt32(SoLuongCTTb.EditValue) < 1)
                {
                    MessageBox.Show("Số lượng mặt hàng không thể để trống hoặc ít hơn 1", "Thông báo");
                    return;
                }

                MatHangCTListView.DataSource = this.dataTable2;
                ListMatHangCT.AddNewRow();
                ListMatHangCT.UpdateCurrentRow();
                MaMatHangCTCb.EditValue = null;
            }

            DataTable dataTable2 = new DataTable();

            private void init_table_CT()
            { 
                for (int i = 0; i < ListMatHangCT.Columns.Count; i++)
                {
                    this.dataTable2.Columns.Add(ListMatHangCT.Columns[i].FieldName, typeof(string));
                }
            }

            private void ListMatHangCT_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
            {
                DataTable mh = controller_HD.get_mathang(MaMatHangCTCb.EditValue.ToString());
                if (mh != null)
                {
                    DataRow row = mh.Rows[0];
                    for (int i = 0; i < ListMatHangCT.Columns.Count; i++)
                    {
                        if (ListMatHangCT.Columns[i].FieldName == "SoLuongNhapXuat")
                            ListMatHangCT.SetRowCellValue(e.RowHandle, ListMatHangCT.Columns[i].FieldName, SoLuongCTTb.EditValue.ToString());
                        else
                            ListMatHangCT.SetRowCellValue(e.RowHandle, ListMatHangCT.Columns[i].FieldName, row[ListMatHangCT.Columns[i].FieldName]);
                    }

                }
            }

            private void XoaMatHangCTBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListMatHangCT.GetFocusedDataSourceRowIndex() < 0)
                    return;

                if (MessageBox.Show("Bạn có thực sự muốn xoá mặt hàng này không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    return;

                ListMatHangCT.DeleteRow(ListMatHangCT.FocusedRowHandle);
            }

            private bool check_CT()
            {
                if (MaChungTuTb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền Mã Chứng Từ !", "Thông báo");
                    return false;
                }

                if (NgayLapCTDp.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền ngày lập chứng từ !", "Thông báo");
                    return false;
                }
                else
                {
                    if (DateTime.Compare(Convert.ToDateTime(NgayLapCTDp.EditValue), DateTime.Now) > 0)
                    {
                        MessageBox.Show("Ngày lập chứng từ không thể lớn hơn ngày hiện tại !");
                        return false;
                    }

                }

                if (MaNhanVienCTCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn mã số nhân viên lập chứng từ !", "Thông báo");
                    return false;
                }

                if (MaKhoCTCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn mã số kho !", "Thông báo");
                    return false;
                }

                if (NgayXuatNhatDp.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa điền ngày nhập - xuất hàng !", "Thông báo");
                    return false;
                }

                if (LoaiChungTuCb.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa chọn loại chứng từ !", "Thông báo");
                    return false;
                }
                else
                {
                    if (LoaiChungTuCb.EditValue.ToString() == "Xuất")
                    {
                          string kho_id = controller_CT.get_id(MaKhoCTCb.EditValue.ToString(),"KHO","Kho");
                            if (kho_id == "")
                            {
                                MessageBox.Show("Mã kho không có thực !", "Thông báo");
                                return false;
                            }

                            DataTable temp;
                            for (int i = 0; i < ListMatHangCT.RowCount; i++)
                            {
                                temp = controller_CT.get_infor(kho_id, ListMatHangCT.GetRowCellValue(i, "MatHangID").ToString());
                                if (temp == null || temp.Rows.Count == 0)
                                {
                                    MessageBox.Show("Mặt hàng " + ListMatHangCT.GetRowCellValue(i, "TenMatHang").ToString() + " chưa có trong kho nên không thể xuất !", "Thông báo");
                                    return false;
                                }
                                else
                                {
                                    if (Convert.ToInt32(temp.Rows[0]["SoLuongTonHienTai"]) < Convert.ToInt32(ListMatHangCT.GetRowCellValue(i, "SoLuongNhapXuat")))
                                    {
                                        MessageBox.Show("Mặt hàng " + ListMatHangCT.GetRowCellValue(i, "TenMatHang").ToString() + " chỉ còn " + temp.Rows[0]["SoLuongTonHienTai"] .ToString()+ " không đủ để xuất !", "Thông báo");
                                        return false;
                                    }
                                }
                            }
                    }
                }

             
                return true;
            }

            private void ChungTuListView_Click(object sender, EventArgs e)
            {
                if (ListChungTu.FocusedRowHandle >= 0)
                {
                    list_CTCT_data(ListChungTu.GetFocusedRowCellValue("ChungTuID").ToString());
                }
            }

            private void InChungTuBtn_ItemClick(object sender, ItemClickEventArgs e)
            {
                if (ListMatHangCT.RowCount == 0)
                {
                    if (ListChungTu.FocusedRowHandle >= 0)
                    {
                        list_CTCT_data(ListChungTu.GetFocusedRowCellValue("ChungTuID").ToString());
                    }
                    else
                    {
                        MessageBox.Show("Bạn phải chọn vào chứng từ mà bạn muốn in !", "Thông báo");
                        return;
                    }
                }

                if (ListChungTu.FocusedRowHandle >= 0)
                {
                    DataRow row = ListChungTu.GetFocusedDataRow();
                    this.print_chungtu((DataTable)MatHangCTListView.DataSource, row);

                }
            }

            #endregion

    /*===================================================================================*/

            private void print_bangluong(DataRow data)
            {
                BangLuongReport rpt = new BangLuongReport();
                rpt.bind_data(data);
                rpt.CreateDocument();
                rpt.ShowPreview();
            }

            private void print_hoadon(DataTable data, DataRow data1)
            {
                HoaDonReport rpt = new HoaDonReport();
                rpt.DataSource = data;
                rpt.bind_data(data1);
                rpt.CreateDocument();
                rpt.ShowPreview();
            }

            private void print_chungtu(DataTable data, DataRow data1)
            {
                ChungTuReport rpt = new ChungTuReport();
                rpt.DataSource = data;
                rpt.bind_data(data1);
                rpt.CreateDocument();
                rpt.ShowPreview();
            }
    }
}